<?php


/*
*   什么叫多态，字面意思就是，多种形态，分两种情况说明
*
*   第一种：一个动作由不同的人去执行，而产生的不同效果或者结果，称为多态
*   
*   //人   笔记本    运行      启动win10系统
*   //人   台式机    运行      启动xp系统
*
*
*   第二种：一个人在不同的状态去执行同一个动作，产生不同的效果，也可以称为多态
*
*   //园丁           剪             修理花草
*   //总裁           剪             裁员
*   //理发师         剪             理发
* 
*/



//创建一个接口，来规范运行的方法
interface Computer{
	public function version();    //这个方法表示采用什么电脑
	public function work();       //这个方法表示电脑是怎么运行的
}

//创建一个笔记本类来实现接口
class NoteComputer implements Computer{
    public function version(){
    	echo '笔记本';
    }
    public function work(){
    	echo '可以运行win10';
    }
}


//创建一个台式机类来实现接口
class DesktopComputer implements Computer{
	public function version(){
		echo '台式机';
	}

	public function work(){
		echo '可以运行xp';
	}
}

//创建一个用户
class Person{
    //这个用户要使用电脑对象，要创建一个方法来接收电脑（笔记本类和台式机类）
    //怎么接收？将他们的对象传递进来即可
    //也就是通过引用对象的传递，即把电脑对象作为一个参数传递进来
    public function _run($type){   //这里传一个对象作为参数，用一个变量接收，实现动态改变
        //调用传递对象的方法
        $type->version();
        $type->work();
    }
}


//有一个接口，两个电脑类，一个是笔记本类，一个是台式机类

//创建电脑对象
//笔记本类
$notecomputer = new NoteComputer();

//台式机类
$desktopcomputer = new DesktopComputer();


//创建电脑类后，电脑并不能使用自己，是人来使用它，所以要创建一个人的对象
$person = new Person();
//用户执行运行的方法
$person->_run($desktopcomputer);   //这种传递，叫做引用对象的传递


























